home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / mail / mh / contrib / jpeek / nx < prev    next >
Text File  |  1992-08-08  |  3KB  |  104 lines

  1. #! /bin/sh
  2. # $Header: /home/jerry/.bin/RCS/nx,v 1.8 92/08/09 23:26:34 jerry mh_contrib $
  3. ###    nx - remove current message after 1 minute; show next message now
  4. ###    Usage: nx [-noverbose]
  5. ###    mrm - remove current message after 1 minute
  6. ###    Usage: mrm [-noverbose]
  7. ##
  8. ##    IF YOU HAVE MH SET TO annoTATE A MESSAGE THAT YOU'RE REPLYING TO
  9. ##    OR FORWARDING, AND YOU DO SOMETHING LIKE THIS:
  10. ##        % repl
  11. ##        ...do the reply...
  12. ##        What now? push
  13. ##        % rmm
  14. ##        % next
  15. ##    YOU CAN GET ERROR MESSAGES FROM THE BACKGROUND LIKE:
  16. ##        Unable to rename 56 to ,56; continuing...
  17. ##    OR WORSE.
  18. ##
  19. ##    mrm AND nx WORK AROUND THIS PROBLEM BY KEEPING TRACK OF THE CURRENT
  20. ##    MESSAGE NUMBER AND FOLDER -- IT STARTS A BACKGROUND JOB THAT DELETES
  21. ##    THE MESSAGE AFTER A SET TIME (NOW, IT'S 60 SECONDS).
  22. ##    nx ALSO DOES THE MH next COMMAND TO SHOW THE NEXT MESSAGE -- GOOD
  23. ##    WHEN YOU'RE READING NEW MAIL MESSAGES.
  24. ##
  25. ##    TO KEEP FROM MESSING UP THE CURRENT CONTEXT WHEN IT REMOVES THE
  26. ##    MESSAGE, mrm & nx MAKE A NEW MH CONTEXT FILE IN /tmp BEFORE
  27. ##    DROPPING ITSELF INTO THE BACKGROUND.  THIS MEANS THAT mrm & nx CAN
  28. ##    "REMEMBER" THE CURRENT FOLDER (IN THE NEW 
  29. ##    context FILE) AND REMOVE THE OLD MESSAGE ANY TIME THEY WANT,
  30. ##    WITHOUT AFFECTING THE MH SYSTEM RUNNING UNDER THE REAL $HOME.
  31. #
  32. #    TO INSTALL, PUT IN A FILE NAMED nx AND LINK mrm TO THAT FILE:
  33. #        % ln nx mrm
  34. #
  35. #    NOTE TO HACKERS: TABSTOPS IN THIS CODE ARE SET AT 4.
  36. #
  37. #    USE AT YOUR OWN RISK.  SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
  38. #    PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
  39.  
  40. mh=/usr/local/mh
  41. stime=60        # HOW LONG TO WAIT BEFORE REMOVING MESSAGE
  42.  
  43. case "$0" in
  44. *mrm) ;;
  45. *nx) shownext=yep ;;
  46. *)    echo "$0: Help!  I don't know how to run myself!?!" 1>&2
  47.     exit 1
  48.     ;;
  49. esac
  50.  
  51. case "$1" in
  52. -n*) shutup=yes ;;
  53. "") ;;
  54. *)    echo "Usage: `basename $0` [-n(overbose)]" 1>&2 ; exit 1 ;;
  55. esac
  56.  
  57. msgpath="`$mh/mhpath cur`"
  58. if test $? -ne 0 -o \( ! -f $msgpath \)
  59. then
  60.     echo "`basename $0`: can't find message to remove." 1>&2
  61.     exit 1
  62. fi
  63.  
  64. case "$shutup" in
  65. "") echo "Removing $msgpath in background..." 1>&2 ;;
  66. esac
  67.  
  68. # FOR FASTER RESPONSE, DO AS MUCH WORK AS WE CAN IN THE BACKGROUND...
  69. (temp=/tmp/NX.err$$
  70. exec 1> $temp 2>&1    # THROW ALL OUTPUT INTO $temp
  71.  
  72. # DO THIS IN A LONG CHAIN OF ifS SO WE ALWAYS LEAVE IF SOMETHING BOMBS.
  73. # (I TRIED A trap, BUT THE SUB-SHELL exit DIDN'T SPRING IT.)
  74.  
  75. # PUT FOLDER NAME IN $folder AND MESSAGE NUMBER IN $msg:
  76. eval `echo $msgpath | sed 's@^\(.*\)/\([1-9][0-9]*\)@folder=\1 msg=\2@'`
  77. # IF THAT WORKED, NOW SET OUR TEMPORARY CURRENT FOLDER & MESSAGE
  78. # NUMBER.
  79. if [ ! -d "$folder" -o ! -f "$folder/$msg" ]
  80. then
  81.     # BARF ERROR INTO MAIL MESSAGE AND QUIT:
  82.     echo "Quitting early: bad directory '$folder'
  83.     and/or file '$msg'
  84.     in $msgpath."
  85. else
  86.     # MAKE TEMPORARY CONTEXT FILE:
  87.     ctx=/tmp/NX$$
  88.     echo "Current-Folder: $folder" >$ctx || exit 1
  89.  
  90.     sleep $stime
  91.     MHCONTEXT=$ctx $mh/rmm $msg
  92. fi
  93.  
  94. # IF $temp HAS ANYTHING IN IT, MAIL THE ERROR (UNDER 4.3BSD, WE CAN'T
  95. # JUST WRITE TO SCREEN; ANYWAY, USER MIGHT HAVE LOGGED OFF):
  96. test -s $temp && $mh/mhmail $USER -s "$0 ERROR rmm-ing $msgpath" <$temp
  97. /bin/rm -f $temp $ctx
  98. exit
  99. ) &
  100.  
  101. case "$shownext" in
  102. yep) $mh/next ;;
  103. esac
  104.